﻿namespace PropOnline.ViewModels.Propiedad
{
    using System;
    using System.Globalization;
    using System.Text;
    using System.Web;
    using PropOnline.Helpers;
    using PropOnline.Models;

    public class PropiedadResultadoViewModel
    {
        private string inmobiliaria;

        private string imagenUrl;        

        public uint Id { get; set; }

        public string Inmobiliaria
        {
            get
            {
                if (!string.IsNullOrEmpty(this.inmobiliaria))
                {
                    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(this.inmobiliaria.ToLower(CultureInfo.CurrentCulture));
                }

                return string.Empty;
            }

            set
            {
                this.inmobiliaria = value;
            }
        }

        public uint? Telefono { get; set; }

        public string TelefonoString
        {
            get
            {
                return PropiedadHelper.FormatTelefono(this.Telefono);
            }
        }

        public string Barrio { get; set; }

        public string Calle { get; set; }

        public string Interseccion { get; set; }

        public string PropiedadTitleLinea2
        {
            get
            {
                StringBuilder builder = new StringBuilder();
                builder.Append(this.Barrio);

                if (this.Ambientes > 0)
                {
                    builder.Append(" - " + this.Ambientes);

                    if (this.Ambientes == 1)
                    {
                        builder.Append(" ambiente");
                    }
                    else
                    {
                        builder.Append(" ambientes");
                    }

                    if (this.Dependencia)
                    {
                        builder.Append(" " + Properties.Resources.ConDependencia);
                    }                    
                }
                else
                {
                    builder.Append(string.IsNullOrEmpty(this.Barrio) ? string.Empty : " - ");
                    builder.Append(EnumExtensions.GetDescription(typeof(TipoPropiedad), this.TipoPropiedad));
                }

                return builder.ToString();
            }
        }

        public string PropiedadTitleLinea1
        {
            get
            {
                StringBuilder builder = new StringBuilder();
                if (!string.IsNullOrEmpty(this.Calle))
                {
                    builder.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(this.Calle.ToLower(CultureInfo.CurrentCulture)));
                    if (this.Altura > 0)
                    {
                        builder.Append(" " + this.Altura.ToString(CultureInfo.CurrentCulture));
                    }
                    else if (!string.IsNullOrEmpty(this.Interseccion))
                    {
                        builder.Append(" y " + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(this.Interseccion.ToLower(CultureInfo.CurrentCulture)));
                    }
                }
                else if (!string.IsNullOrEmpty(this.Barrio))
                {
                    builder.Append(this.Barrio);
                }
                else
                {
                    builder.Append(EnumExtensions.GetDescription(typeof(TipoPropiedad), this.TipoPropiedad));
                }

                return builder.ToString();
            }
        }

        public string Zona { get; set; }

        public uint Altura { get; set; }

        public string Piso { get; set; }

        public string Departamento { get; set; }

        public uint Ambientes { get; set; }

        public bool Dependencia { get; set; }

        public DateTime FechaPrimeraPub { get; set; }

        public string TiempoEnMercado
        {
            get
            {
                return PropiedadHelper.ObtenerTiempoEnMercado(this.FechaPrimeraPub);
            }
        }

        public string ImagenUrl
        {
            get
            {
                if (this.imagenUrl == null)
                {
                    return VirtualPathUtility.ToAbsolute(PropOnlineConstants.PropiedadSinFotoUrl);
                }

                return this.imagenUrl;
            }

            set
            {
                this.imagenUrl = value;
            }
        }

        public uint? Precio { get; set; }

        public string PrecioString
        {
            get
            {
                if (this.Precio > 0)
                {
                    var precio = this.Precio.Value.ToString("N0", CultureInfo.CurrentCulture);
                    var moneda = EnumExtensions.GetDescription(typeof(Moneda), this.Moneda);

                    return String.Format(" - {0} {1}", moneda, precio, CultureInfo.CurrentCulture);
                }

                return string.Empty;
            }
        }

        public Moneda? Moneda { get; set; }

        public DateTime FechaUltimaPublicacion { get; set; }

        public string FechaUltimaPublicacionString
        {
            get
            {
                if (this.FechaUltimaPublicacion != null)
                {
                    return this.FechaUltimaPublicacion.ToString("dd/MM/yyyy", CultureInfo.CurrentCulture);
                }

                return string.Empty;
            }
        }

        public Fuente? Fuente { get; set; }

        public TipoPropiedad TipoPropiedad { get; set; }

        public short? Superficie { get; set; }
    }
}